home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / nihcl-30.lha / nihcl-3.0 / vectest / bitvec.c < prev    next >
C/C++ Source or Header  |  1990-05-16  |  6KB  |  169 lines

  1. /* Test class BitVec
  2.  
  3.     THIS SOFTWARE FITS THE DESCRIPTION IN THE U.S. COPYRIGHT ACT OF A
  4.     "UNITED STATES GOVERNMENT WORK".  IT WAS WRITTEN AS A PART OF THE
  5.     AUTHOR'S OFFICIAL DUTIES AS A GOVERNMENT EMPLOYEE.  THIS MEANS IT
  6.     CANNOT BE COPYRIGHTED.  THIS SOFTWARE IS FREELY AVAILABLE TO THE
  7.     PUBLIC FOR USE WITHOUT A COPYRIGHT NOTICE, AND THERE ARE NO
  8.     RESTRICTIONS ON ITS USE, NOW OR SUBSEQUENTLY.
  9.  
  10. Author:
  11.     K. E. Gorlen
  12.     Bg. 12A, Rm. 2033
  13.     Computer Systems Laboratory
  14.     Division of Computer Research and Technology
  15.     National Institutes of Health
  16.     Bethesda, Maryland 20892
  17.     Phone: (301) 496-1111
  18.     uucp: uunet!nih-csl!kgorlen
  19.     Internet:kgorlen@alw.nih.gov
  20.  
  21. Function:
  22.     
  23. Modification History:
  24.     
  25. $Log:    bitvec.c,v $
  26.  * Revision 3.0  90/05/16  23:06:32  kgorlen
  27.  * Release for 1st edition.
  28.  * 
  29. */
  30. #include "IntVec.h"
  31. static char rcsid[] = "$Header: /afs/alw.nih.gov/unix/sun4_40c/usr/local/src/nihcl-3.0/share/vectest/RCS/bitvec.c,v 3.0 90/05/16 23:06:32 kgorlen Rel $";
  32.  
  33. static int initI[] = { 1,3,5 };
  34. static bitVecByte initA[] = { 0x0a, 0x03 };
  35. static bitVecByte initB[] = { 0x0c, 0x02 };
  36.  
  37. static const IntVec I(initI,3);        // I = { 1 3 5 }
  38. static const BitVec A(initA,10);    // A = { 0 1 0 1 0 0 0 0 1 1 }
  39. static const BitVec B(initB,10);    // B = { 0 0 1 1 0 0 0 0 0 1 }
  40.  
  41. void test1()
  42. {
  43. // BitVec(unsigned)
  44.     BitVec C;            // C = {}
  45. // BitVec(const BitVec&)
  46.     BitVec T(A);            // T = A
  47.     cerr << "BitVec T(A): " << T << endl;
  48. // BitVec(const BitSlice&)
  49.     BitVec U(A(0,5,2));        // U = { 0 0 0 0 1 }
  50.     cerr << "BitVec U(A(0,5,2)): " << U << endl;
  51. // BitVec(unsigned,bool)
  52.     BitVec V(10,YES);        // V = { 1 1 1 1 1 1 1 1 1 1 }
  53.     cerr << "BitVec V(10,YES): " << V << endl;
  54. // BitVec::operator=(const BitVec&)
  55.     C = U;                // C = { 0 0 0 0 1 }
  56.     cerr << "C = U: " << C << endl;
  57.     C = C;
  58.     cerr << "C = C: " << C << endl;
  59. // BitVec::operator=(const BitSlice&)
  60.     C = A(0,5,2);            // C = { 0 0 0 0 1 }
  61.     cerr << "C = A(0,5,2): " << C << endl;
  62.     C = A;  C = C(0,5,2);        // C = { 0 0 0 0 1 }
  63.     cerr << "C = A; C = C(0,5,2): " << C << endl;
  64. // BitVec::operator=(const BitSlct&)
  65.     C = A[B];            // C = { 0 1 1 }
  66.     cerr << "C = A[B]: " << C << endl;
  67.     C = A;  C = C[B];        // C = { 0 1 1 }
  68.     cerr << "C = A;  C = C[B]: " << C << endl;
  69. // BitVec::operator=(const BitPick&)
  70.     C = A[I];            // C = { 1 1 0 }
  71.     cerr << "C = A[I]: " << C << endl;
  72.     C = A;  C = C[I];        // C = { 1 1 0 }
  73.     cerr << "C = A;  C = C[I]: " << C << endl;
  74. // BitVec::operator=(bool)
  75.     C = 0;                // C = { 0 0 0 }
  76.     cerr << "C = 0: " << C << endl;
  77. // BitVec::operator!(const BitVec&)
  78.     C = !A;                // C = { 1 0 1 0 1 1 1 1 0 0 }
  79.     cerr << "C = !A: " << C << endl;
  80. // FRIEND_BitVec_OP_BitVec__BitVec
  81.     C = A|B;            // C = { 0 1 1 1 0 0 0 0 1 1 }
  82.     cerr << "C = A|B: " << C << endl;
  83. // FRIEND_BitVec_ASNOP_BitVec
  84.     C = A;  C ^= B;            // C = { 0 1 1 0 0 0 0 0 1 0 }
  85.     cerr << "C = A;  C ^= B: " << C << endl;
  86. }
  87.  
  88. void test2()
  89. {
  90. // BitVec(unsigned)
  91.     BitVec C;            // C = {}
  92. // BitSlice::operator=(const BitVec&)
  93.     C = A;  C(0,5,2) = BitVec(5,YES);    // C = { 1 1 1 1 1 0 1 0 1 1 }
  94.     cerr << "C = A;  C(0,5,2) = BitVec(5,YES): " << C << endl;
  95. // BitSlice::operator=(const BitSlice&)
  96.     C(1,5,2) = C(0,5,2);        // C = { 1 1 1 1 1 1 1 1 1 1 }
  97.     cerr << "C(1,5,2) = C(0,5,2): " << C << endl;
  98. // BitSlice::operator=(const BitPick&)
  99.     C(0,3,1) = A[I];        // C = { 1 1 0 1 1 1 1 1 1 1 }
  100.     cerr << "C(0,3,1) = A[I]: " << C << endl;
  101. // BitSlice::operator=(const BitSlct&)
  102.     C(3,3,1) = A[B];        // C = { 1 1 0 0 1 1 1 1 1 1 }
  103.     cerr << "C(3,3,1) = A[B]: " << C << endl;
  104. // BitSlice::operator=(bool)
  105.     C(0,6,1) = 0;            // C = { 0 0 0 0 0 0 1 1 1 1 }
  106.     cerr << "C(0,6,1) = 0: " << C << endl;
  107. // BitVec operator!(const BitSlice&)
  108.     C = !A(0,5,2);            // C = { 1 1 1 1 0 }
  109.     cerr << "C = !A(0,5,2): " << C << endl;
  110. // FRIEND_BitSlice_OP_BitSlice__Bitvec
  111.     C = A(0,5,2)^B(1,5,2);        // C = { 0 1 0 0 0 }
  112.     cerr << "C = A(0,5,2)^B(1,5,2): " << C << endl;
  113. // FRIEND_BitSlice_ASNOP_BitSlice
  114.     C = A;  C(0,5,2) ^= B(1,5,2);    // C = { 0 1 1 1 0 0 0 0 0 1 }
  115.     cerr << "C = A;  C(0,5,2) ^= B(1,5,2): " << C << endl;
  116. // BitPick::operator=(const BitVec&)
  117.     C = A;  C[I] = BitVec(initA,3);    // C = { 0 0 0 1 0 0 0 0 1 1 }
  118.     cerr << "C = A; C[I] =  BitVec(initA,3): " << C << endl;
  119. // BitPick::operator=(const BitPick&)
  120.     C[I] = A[I];            // C = { 0 1 0 1 0 0 0 0 1 1 }
  121.     cerr << "C[I] = A[I]: " << C << endl;
  122. // BitPick::operator=(const BitSlct&)
  123.     C[I] = A[B];            // C = { 0 0 0 1 0 1 0 0 1 1 }    
  124.     cerr << "C[I] = A[B]: " << C << endl;
  125. // BitPick::operator=(const BitSlice&)
  126.     C = A;  C[I] = A(0,3,2);    // C = { 0 0 0 0 0 0 0 0 1 1 }
  127.     cerr << "C[I] = A(0,3,2): " << C << endl;
  128. // BitPick::operator=(bool scalar)
  129.     C[I] = YES;            // C = { 0 1 0 1 0 1 0 0 1 1 }
  130.     cerr << "C[I] = YES: " << C << endl;
  131. // BitPick::operator BitSlice()
  132.     C = A[I]|B[I];            // C = { 1 1 0 }
  133.     cerr << "C = A[I]|B[I]: " << C << endl;
  134. // BitSlct::operator=(const BitVec&)
  135.     C = A;  C[A] = BitVec(4,NO);
  136.     cerr << "C = A;  C[A] = BitVec(4,NO): " << C << endl;    // C = { 0 0 0 0 0 0 0 0 0 0 }
  137. // BitSlct::operator=(const BitPick&)
  138.     C = B;  C[B] = A[I];
  139.     cerr << "C = B;  C[B] = A[I]: " << C << endl;        // C = { 0 0 1 1 0 0 0 0 0 0 }
  140. // BitSlct::operator=(const BitSlct&)
  141.     C = A;  C[A] = B[A];                    // C = { 0 0 0 1 0 0 0 0 0 1 }
  142.     cerr << "C = A;  C[A] = B[A]: " << C << endl;
  143. // BitSlct::operator=(const BitSlice&)
  144.     C = A;  C[A] = B(0,4,1);                // C = { 0 0 0 0 0 0 0 0 1 1 }
  145.     cerr << "C = A;  C[A] = B(0,4,1): " << C << endl;
  146. // BitSlct::operator=(bool)
  147.     C = A;  C[A] = NO;                    // C = { 0 0 0 0 0 0 0 0 0 0 }
  148.     cerr << "C = A;  C[A] = NO: " << C << endl;
  149. // BitSlct::operator BitSlice()
  150.     C = A[B]|B(0,3,1);                    // C = { 0 1 1 }
  151.     cerr << "C = A[B]|B(0,3,1): " << C << endl;
  152. // BitVec reverse(const BitSlice&)
  153.     C = reverse(B(0,4,1));
  154.     cerr << "reverse(B(0,4,1)): " << C << endl;        // { 1 1 0 0 }
  155. // int sum(const BitSlice&)
  156.     cerr << "sum(A(1,5,2)): " << sum(A(1,5,2)) << endl;    // 3
  157. }
  158.  
  159. main()
  160. {
  161.     cerr << "Test class BitVec\n";
  162.     cerr << "IntVec I(3,1,2): " << I << endl;
  163. // BitVec(bitVecByte*,unsigned)
  164.     cerr << "BitVec A(initA,10): " << A << endl;
  165.     cerr << "BitVec B(initB,10): " << B << endl;
  166.     test1();
  167.     test2();
  168. }
  169.